import tsPlugin from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';
import prettierConfig from 'eslint-config-prettier';
import pluginImport from 'eslint-plugin-import';
import pluginPrettier from 'eslint-plugin-prettier';
import simpleImportSort from 'eslint-plugin-simple-import-sort';
import pluginVue from 'eslint-plugin-vue';
import globals from 'globals';
import vueParser from 'vue-eslint-parser';

export default [
  // 基础配置
  {
    ignores: ['node_modules', 'dist', '**/dist/**', '**/dist-ssr/**', '**/coverage/**', 'iconfont.js'], // 忽略的文件
  },
  // 环境配置
  {
    languageOptions: {
      globals: {
        ...globals.browser, // 浏览器全局变量
        ...globals.node, // Node.js 全局变量
      },
    },
  },
  {
    files: ['**/*.vue'], // 检查所有 .vue 文件
    languageOptions: {
      parser: vueParser, // 使用 vue-eslint-parser 解析 Vue 文件
      parserOptions: {
        parser: tsParser, // 内部使用 @typescript-eslint/parser 解析 <script> 部分
        ecmaVersion: 2020,
        sourceType: 'module',
        extraFileExtensions: ['.vue'], // 支持 .vue 文件
        ecmaFeatures: {
          jsx: true, // 如果使用 JSX，可以启用此选项
        },
      },
    },
    plugins: {
      vue: pluginVue, // 加载 Vue 插件
      '@typescript-eslint': tsPlugin,
    },
    rules: {
      ...pluginVue.configs.recommended.rules, // Vue 推荐规则
      ...tsPlugin.configs.recommended.rules, // TypeScript 推荐规则
      '@typescript-eslint/no-unused-vars': ['warn'], // 检测未使用的变量
      // Vue 特定规则
      'vue/multi-word-component-names': 0, // 禁用多单词组件名规则
      '@typescript-eslint/no-explicit-any': 'off', // 限制 any 类型
    },
  },
  // 2. TypeScript 规则
  {
    files: ['**/*.ts', '**/*.tsx'],
    languageOptions: {
      parser: tsParser,
      parserOptions: {
        ecmaVersion: 2020,
        sourceType: 'module',
        project: './tsconfig.json', // 可选，用于类型感知规则
      },
    },
    plugins: {
      '@typescript-eslint': tsPlugin,
    },
    rules: {
      ...tsPlugin.configs.recommended.rules,
      '@typescript-eslint/no-unused-vars': ['warn'], // 检测未使用的变量
      '@typescript-eslint/no-explicit-any': 'off', // 限制 any 类型
      '@typescript-eslint/no-unused-vars': ['warn'], // 检测未使用的变量
    },
  },
  // 使用 ESLint 推荐规则
  // Prettier 配置

  // Import 排序配置
  {
    ignores: ['vite.config.ts'], // 忽略的文件
    plugins: {
      import: pluginImport,
      'simple-import-sort': simpleImportSort,
    },
    rules: {
      // 启用 simple-import-sort 的自动排序
      'simple-import-sort/imports': [
        'error',
        {
          groups: [
            // 内置模块
            ['^node:'],
            // 外部依赖
            ['^@?\\w'],
            // 内部模块
            ['^@/'], // 假设你的项目使用 `@/` 作为别名
            // 父目录模块
            ['^\\.\\.'],
            // 当前目录模块
            ['^\\.'],
            // 样式文件
            ['^.+\\.(css|scss|less)$'],
          ],
        },
      ],
      'simple-import-sort/exports': 'error',
      // 防止与其他 import 规则冲突
      'import/first': 'error',
      'import/newline-after-import': 'error',
      'import/no-duplicates': 'error',
      'import/no-unresolved': ['error', { commonjs: true, caseSensitive: true }],
    },
  },
  // 避免@报错
  {
    settings: {
      'import/resolver': {
        alias: {
          map: [['@', './src']], // 与 Vite 配置一致
          extensions: ['.js', '.ts', '.vue', '.json'], // 可解析的文件扩展名
        },
      },
      // 添加 node 解析器以支持 node_modules 中的包
      node: {
        extensions: ['.js', '.jsx', '.ts', '.tsx', '.vue'],
        paths: ['node_modules', 'src'],
      },
      typescript: {
        // 如果你使用 TypeScript，可以添加这个配置
        alwaysTryTypes: true, // 总是尝试解析 @types/* 定义
        project: './tsconfig.json',
      },
    },
  },
  // 关闭与 Prettier 冲突的 ESLint 规则
  prettierConfig,
  {
    plugins: {
      prettier: pluginPrettier,
    },
    rules: {
      'prettier/prettier': [
        'error',
        {
          semi: true,
          singleQuote: true,
          trailingComma: 'es5',
          printWidth: 120,
          tabWidth: 2,
          useTabs: false,
          endOfLine: 'lf',
        },
      ],
    },
  },
];
